using Android.App;
using Android.Content;
using Android.OS;
using Android.Content.PM;

namespace AndroidApp2
{
    /// <summary>
    /// 服务状态回调接口
    /// </summary>
    public interface IServiceStateCallback
    {
        void OnServiceStateChanged(bool isRunning);
        void OnServiceError(string error);
    }
    
    /// <summary>
    /// 服务管理器 - 提供统一的前台服务管理功能
    /// 负责前台服务的启动、停止和状态管理
    /// </summary>
    public static class ServiceManager
    {
        /// <summary>
        /// 服务运行状态标志
        /// 用于跟踪前台服务是否正在运行
        /// </summary>
        private static volatile bool _isServiceRunning = false;
        
        /// <summary>
        /// 状态回调接口
        /// </summary>
        private static IServiceStateCallback? _stateCallback;
        
        /// <summary>
        /// 日志管理器
        /// </summary>
        private static readonly LogManager _logManager = LogManager.Instance;
        
        /// <summary>
        /// 设置状态回调
        /// </summary>
        /// <param name="callback">状态回调接口</param>
        public static void SetStateCallback(IServiceStateCallback? callback)
        {
            _stateCallback = callback;
        }

        /// <summary>
        /// 启动前台服务
        /// 根据Android版本选择合适的启动方式
        /// </summary>
        /// <param name="context">上下文对象，用于启动服务</param>
        public static bool StartForegroundService(Context context)
        {
            try
            {
                // 检查服务是否已经在运行，避免重复启动
                if (_isServiceRunning)
                {
                    _logManager.LogWarning("前台服务已经在运行中", "服务管理器");
                    return true;
                }
                
                // 检查权限
                if (!CheckPermissions(context))
                {
                    _stateCallback?.OnServiceError("缺少必要的服务权限");
                    return false;
                }

                // 创建启动服务的Intent
                var serviceIntent = new Intent(context, typeof(ForegroundService));
                
                // 根据Android版本选择合适的启动方式
                if (Build.VERSION.SdkInt >= BuildVersionCodes.O)
                {
                    // Android 8.0及以上版本使用StartForegroundService
                    context.StartForegroundService(serviceIntent);
                }
                else
                {
                    // Android 8.0以下版本使用普通StartService
                    context.StartService(serviceIntent);
                }
                
                // 更新服务运行状态
                _isServiceRunning = true;
                _stateCallback?.OnServiceStateChanged(true);
                _logManager.LogService("前台服务已启动");
                
                return true;
            }
            catch (Exception ex)
            {
                _logManager.LogError($"启动前台服务失败: {ex.Message}", "服务管理器");
                _stateCallback?.OnServiceError($"启动服务失败: {ex.Message}");
                return false;
            }
        }

        /// <summary>
        /// 停止前台服务
        /// 终止正在运行的前台服务
        /// </summary>
        /// <param name="context">上下文对象，用于停止服务</param>
        public static bool StopForegroundService(Context context)
        {
            try
            {
                // 检查服务是否正在运行
                if (!_isServiceRunning)
                {
                    _logManager.LogWarning("前台服务未运行", "服务管理器");
                    return true;
                }

                // 创建停止服务的Intent
                var serviceIntent = new Intent(context, typeof(ForegroundService));
                bool result = context.StopService(serviceIntent);
                
                // 更新服务运行状态
                _isServiceRunning = false;
                _stateCallback?.OnServiceStateChanged(false);
                _logManager.LogService("前台服务已停止");
                
                return result;
            }
            catch (Exception ex)
            {
                _logManager.LogError($"停止前台服务失败: {ex.Message}", "服务管理器");
                _stateCallback?.OnServiceError($"停止服务失败: {ex.Message}");
                return false;
            }
        }

        /// <summary>
        /// 检查服务运行状态
        /// 返回前台服务是否正在运行
        /// </summary>
        /// <returns>如果服务正在运行返回true，否则返回false</returns>
        public static bool IsServiceRunning()
        {
            return _isServiceRunning;
        }
        
        /// <summary>
        /// 内部服务状态更新（由服务本身调用）
        /// </summary>
        /// <param name="isRunning">服务运行状态</param>
        internal static void UpdateServiceState(bool isRunning)
        {
            _isServiceRunning = isRunning;
            _stateCallback?.OnServiceStateChanged(isRunning);
        }
        
        /// <summary>
        /// 检查必要的权限
        /// </summary>
        /// <param name="context">上下文</param>
        /// <returns>权限检查结果</returns>
        private static bool CheckPermissions(Context context)
        {
            try
            {
                // 检查前台服务权限
                var packageManager = context.PackageManager;
                if (packageManager != null)
                {
                    var permission = packageManager.CheckPermission(
                        Android.Manifest.Permission.ForegroundService, 
                        context.PackageName);
                    
                    if (permission != Permission.Granted)
                    {
                        _logManager.LogError("缺少前台服务权限", "服务管理器");
                        return false;
                    }
                }
                
                return true;
            }
            catch (Exception ex)
            {
                _logManager.LogError($"权限检查失败: {ex.Message}", "服务管理器");
                return false;
            }
        }
    }
}